
สวัสดีปีใหม่ครับทุกท่าน วันนี้ chicken0248 มากับทีม Wowza ได้มีโอกาสได้เข้าร่วมการแข่งขัน CTF (คือความท้าทาย~) ของ SEC Playground ที่มีระยะเวลาการแข่งที่ยาวนานถึง 4 วัน ตั้งแต่วันที่ 25 - 28 Dec 2024 ซึ่งก็มีโจทย์ที่เยอะขึ้นให้เหมาะสมกับจำนวนวันที่เพิ่มขึ้น

Event นี้จะมีทั้งหมด 6 หมวดโดยจะแบ่งเป็น - Web Application Security 11 ข้อ (Easy: 7, Medium: 3, Hard: 1) - Reverse Engineering 6 ข้อ (Easy: 5, Hard: 1) - Log analysis 3 ข้อ (Easy หมดเลย) - Digital Forensic 11 ข้อ (Easy: 5, Medium: 4, Hard: 2) - Incident#1 8 ข้อ (Easy: 6, Medium: 1, Hard: 1) - Cryptography 2 ข้อ (Easy หมดเลย)
ซึ่งเราจะเห็นว่าโจทย์ในรอบนี้มีสัดเส้นที่เน้นไปทาง Blue Team สูงมาก เพราะแค่ Digital Forensic ก็มีจำนวนโจทย์เท่ากับ Web App แล้ว
และใน blog นี้ ผมจะมาเขียน write up ในหมวดของ Incident#1 และ Reverse Engineering ครับ เนื่องจากหมวด Digital Forensic ได้ตกลงกับพี่ MirthZ แล้วว่าให้แกเป็นคนเขียน 5 5 5

ในหมวดนี้จะมีอยู่ทั้งหมด 8 ข้อเริ่มจาก Medium ที่เปิดมาก็ไม่ใช่ Blue team แล้ว (Incident แบบใดห์) ซึ่งผมขอข้ามการทำ write up ในส่วนของข้อแรกนะครับ เนื่องจาก not in my field of expertise
แต่ถึงยังงั้นเราก็ต้องการ password จาก Phantom of the Network#1 เพื่อไปแตกไฟล์ที่เราโหลดจาก Phantom of the Network#2 ซึ่งเราจะใช้ไฟล์นี้ได้จนถึงข้อสุดท้ายเลย

โดยในโจทย์แรกนั้นจะมี Website host อยู่บน 2 port นั่นก็คือ port 80 และ 8080

ซึ่งเมื่อเราเข้าไปที่หน้า index ของเว็บไซต์ที่ host บน port 80 แล้ว view page source, เราก็จะพบกับ SHA256 สองตัวที่ถูก separate ด้วยเครื่องหมาย +

แยก SHA256 สองตัวออกจากกัน จากนั้นก็ใช้ rainbow table เพื่อหา plaintext โดยเราจะได้ xmas2024 โดยเราสามารถนำ password นี้มาแตกไฟล์ที่ได้จาก Phantom of the Network#2 ได้เลย
ถ้าเราอ่านคำอธิบายโจทย์ข้อนี้ เราก็อาจจะเข้าใจไปว่าให้หาไฟล์ที่ดาวน์โหลดมาเป็นไฟล์แรก แต่จริง ๆ แล้วโจทย์ต้องการให้หา ใครเล่น CTF บน platform นี้ต้องทำใจเพราะคำอธิบายจะค่อนข้างมึน ๆ ฉะนั้นเราข้ามมาที่วิธี solve กันเลยดีกว่า

เมื่อแตกไฟล์แล้ว เราจะพบว่าไฟล์ที่เราได้มาก็คือไฟล์ที่ได้รับการเก็บจากโปรแกรม KAPE ซึ่งทาง secplayground ก็ค่อนข้างใจดีที่มีการ parse artifacts บางอย่างด้วย Module ภายใน KAPE มาให้เราแล้ว ซึ่งเราจะสามารถหาผลลัพธ์จากการ analyze

โดยผลลัพธ์ทั้งหมดที่ถูก parse จะสามารถหาได้ภายในโฟลเดอร์ ModuleResult

เมื่อเราเปิดไฟล์ 20241203083207_EvtxECmd_Output.csv ซึ่งเป็นไฟล์ที่ถูก parse ด้วย EvtxECmd ในการ parse Windows event log เราจะพบว่า security event log ได้ถูก set audit policy ให้ทำการ log command line ของ process ด้วย ซึ่งเมื่อได้ค้นหาด้วย Cmdlet ของ PowerShell ที่เกี่ยวข้องกับการ fetch content จาก website อย่าง Invoke-WebRequest เราก็จะพบว่ามี PowerShell command ปริศนาที่ fetch content จาก blogoss[.]fr ก่อนจะถูก execute ด้วย iex หรือ Invoke-Expression Cmdlet

ต่อมาเมื่อเราเอา domain นี้มา search บน any.run, เราจะพบหลาย report ที่มีคนเคยมา submit url ที่เราพบเอาไว้แล้ว ดังนั้นเลือกอันที่ชอบที่ชอบเพื่อเข้าไปอ่าน script กันเถอะ
https://app.any.run/tasks/e742b873-0cf5-4ac6-a22e-672437dda00b
ซึ่งเราจะพบว่านี่จะเป็นสคริปต์ PowerShell ที่จะดาวน์โหลด makron.zip จาก fatcriminal[.]com ไปยัง C:\ProgramData โดยตั้งชื่อ output file เป็น pzk.zip ซึ่งเป็น flag ของข้อนี้นั่นเอง
forensic{pzk.zip}

ซึ่งหลังจากโหลดไฟล์, script นี้จะ fetch content จาก iplogger.co เพื่อ log IP address ของเหยื่อที่ run script นี้

จากข้อที่แล้วเราพบว่า เมื่อ file ถูกดาวน์โหลดไปที่ C:\ProgramData ไฟล์zip ก็จะถูก decompress ด้วย Expand-Archive Cmdlet ไปยัง C:\ProgramData\Extrac ซึ่งก็เป็น flag ของข้อนี้ นั่นเอง

เมื่อเรากลับมาลองเช็คใน event log, เราก็จะพบว่า script นี้ถูก run จริง ๆ ไม่ติงนัง
forensic{C:\ProgramData\Extrac}


เราพบว่า kokesh.exe ก็คือไฟล์ที่ถูก decompress จาก pzk.zip แล้วก็ถูก run ซึ่งเมื่อเราเอาชื่อไฟล์นี้มาค้นใน hybrid-analysis, ซึ่งเราก็จะได้ SHA256 จากในหน้า search ทันทีโดยที่ไม่ต้องกดเข้าไปดูซัก report เลย
forensic{0e78733824c1cdf52b59dadf1fa5f8b4a7c59dcfdbaceb226eee23f6cd04ea46}

เราสามารถหาคำตอบของข้อนี้ได้หลายวิธีเนื่องจากเราได้ hash ของไฟล์มาแล้ว

วิธีแรกที่ง่ายที่สุดต่อจากข้อที่แล้วก็คือการกดเข้ามาส่อง hybrid analysis ซัก report โดยในส่วนของ "File Details" ก็จะมีรายละเอียดต่าง ๆ ของไฟล์ที่ sandbox ตรวจสอบได้ ซึ่งนั่นก็รวมถึง original filename ของไฟล์นี้นั่นเอง

วิธีที่สองที่จะทำให้เราได้เบาะแสไปยังข้อที่ 7-8 ก็คือการนำ hash ไป search บน VirusTotal ซึ่งนอกจากจะได้ original filename แล้ว เราก็ยังได้ชื่อ family ของ malware ซึ่งนั่นก็คือ Lumma Stealer นั่นเอง
forensic{net1.exe}


กลับมาที่ event log เราจะพบว่าหลังจาก lumma stealer ถูก run ก็ได้มี msedge.exe ซึ่งเป็น process ของ Microsoft Edge ถูก run ด้วย flag --remote-debugging-port=9221 โดยเทคนิคนี้จะเป็นการ abuse remote debugging port ของ Chromium ทำให้ malware สามารถ bypass security check บางอย่างรวมถึงการ remote access มาที่เครื่องของเหยื่อด้วย (bind shell)
forensic{9221}
สำหรับคนที่สนใจเทคนิคนี้ แนะนำให้ตามไปที่ เว็บนี้เลย -> https://krptyk.com/2023/11/12/remotechromiumpwn/

ข้อนี้จะให้เราหา shortcut หรือปุ่มที่เรากดบนคีย์บอร์ดนั่นแหละ ซึ่งถ้าไม่รู้เช่นเห็นชาติตระกูลของมัลแวร์ก็อาจจะไปยากนิดนึง แต่เนื่องจากเรารู้ชาติตระกูลของมัลแวร์ตัวนี้เรียบร้อยแล้ว ซึ่ง lumma stealer ในช่วงหลายเดือนที่ผ่านมาค่อนข้างจะ popular ในหมู่ threat intelligence gatherer และ malware researcher เนื่องจากได้ทำการ deliver ด้วย Fake Captcha campaign

ซึ่งเมื่อเรากลับมาที่ any.run เราก็จะพบว่ามี domain อีก domain ที่เรายังไม่ได้เข้าไปส่องนั่นก็คือ fiare-activity[.]com

เมื่อเรากดเข้าไปดูใน report ก็จะพบว่านี่เป็นการ deliver ด้วย Fake Captcha จริง ๆ โดยให้กดปุ่ม Windows + R จะเป็นการเปิด run box ขึ้นมา จากนั้นเมื่อกด Ctrl + V ก็จะเป็นการ paste PowerShell command ที่ถูก host อยู่บน website (ที่เราเจอใน event log) โดยจะแอบฝังเข้ามาใน clipboard ของ user แล้วเมื่อกด Enter ก็จะเป็นการ run command นั้นนั่นเอง
forensic{(Windows+R)+(Ctrl+V)+(Enter)}
ถ้าสนใจ lab ที่ investigate เคสคล้าย ๆ กันนี้แนะนำให้เล่น Pikaptcha sherlock จาก HackTheBox เพื่อเรียนรู้วิธีการป้องกันและการ investigate ว่าจะเกิดอะไรขึ้นเมื่อ PowerShell command ถูก execute ผ่าน Run box


เมื่อเรารู้แล้วว่าการ deliver fake captcha ก็จะต้องมาจาก Web Browser ดังนั้นเราก็จะต้องมาเปิด Microsoft Edge History ไฟล์ของ cheese user ซึ่งเราจะพบการ redirect เริ่มต้นมาจาก en1[.]savefrom[.]net ซึ่งก็เป็นคำตอบของข้อนี้นี่เอง
forensic{en1.savefrom.net}
จบไปแล้วกับหมวดของ Incident#1 เราไปต่อที่ Reverse Engineering กันเลย

Reverse Engineer เป็นหมวดที่ผมไม่เคยคิดจะเขียน write-up มาก่อน แต่สาเหตุที่ทำให้ผมต้องมาเขียน write-up ในครั้งนี้นั้นเพราะมันไม่จำเป็นต้อง reverse เสมอไป, ทำ Threat Intel ก็หาคำตอบได้


เรามาเริ่มกันที่ข้อแรกกันเลย ข้อนี้จะให้เราหา SHA256 hash ของ ransomware ที่เราโหลดมาจากโจทย์

โดยในข้อนี้เราต้องตอบ hash เป็น upper case (ตัวพิมพ์ใหญ่ให้หมด) ซึ่งถ้าเราเอาไปโยนใน VirusTotal หรือใช้ certutil หาค่า hash ก็จะต้องนำค่า hash ไป "to uppercase" แต่ถ้าเราใช้ Get-FileHash Cmdlet บน PowerShell, เราก็จะได้ SHA256 ที่เป็นตัว uppercase ทั้งหมดทันทีโดยที่ไม่ต้องไป convert
re{B8AF9CBD706C13F5E7F20573FF5F2894966C905835BD7C026B8C96F20E304C0B}


ในข้อนี้ถ้าเราเอาไปโยนใส่ VirusTotal ก็จะเห็นได้ไม่ยากว่า ransomware ตัวนี้ถูกเขียนขึ้นมาโดยใช้ภาษางู (Python)
re{python}


ในเมื่อเราใช้ VirusTotal ให้เป็นประโยชน์แล้วก็ต้องไปต่อให้สุด เราสามารถกดไปที่ Behavior เพื่ออ่านข้อมูลเพิ่มเติมเกี่ยวกับพฤติกรรมต่าง ๆ ของ ransomware ตัวนี้เมื่อถูก run บน Sandbox ซึ่งเราก็จะเห็นว่ามีไฟล์จำนวนมากมี .qwerty ต่อท้าย file extension เดิม และนั่นก็เป็นคำตอบของข้อนี้นี่เอง
re{qwerty}


ต่อมาเราก็มาใช้ public sandbox ตัวอื่นให้เป็นประโยชน์อย่างเช่น any.run ซึ่งเราจะเห็นว่า ransomnote ได้ถูกเปิดด้วย notepad.exe หลังจาก ransomware ถูกรัน ซึ่งชื่อของ ransomnote ก็คือคำตอบของข้อนี้นี่เอง
re{UNLOCK_README.txt}


เรารู้ว่า ransomware ตัวนี้ถูกเขียนด้วย python ดังนั้นเราสามารถใช้ pyinstxtractor ในการแตก pyc ไฟล์ออกมาจากตัว executable ได้ ซึ่งเมื่อเราแตกไฟล์ออกมาก็จะพบว่าเราจำเป็นต้องใช้ decompiler ที่ support Python 3.12 ในการ decompile ซึ่ง Uncompyle6 ซึ่งเป็น python decompiler ยอดฮิตก็ไม่ได้ support python version นี้

แต่มันก็ยังมี python online decompiler อย่าง pylingual อยู่ ซึ่ง support python 3.12 และสามารถ decompile main.pyc ออกมาแล้วพบกับ hard-coded IV ของ ransomware ตัวนี้ได้ภายใต้ JamCrypt class
re{secplaygroundgod}


ในข้อนี้เราจะได้ไฟล์ขนาด 10MB มา reverse ซึ่งค่อนข้างใหญ่และเมื่อเราโยนใส่ Detect It Easy มันก็จะ detect ว่าตัว executable ตัวนี้ถูกเขียนด้วยภาษา C หรือ C++ ตาม Compiler

แต่เมื่อเราใช้ลองใช้ strings ใส่ดูจะพบว่าที่จริงแล้วธาตุแท้ของมันก็คือ .NET compiled executable ดี ๆ นี่เอง
ซึ่งจากนั้นเราจำเป็นต้องใช้ iLspy ในการ decompile executable ตัวนี้ เพราะว่า dnspy ไม่สามารถ detect ได้ว่าไฟล์ตัวนี้เป็น .NET compiled executable

เมื่อ decompile เสร็จแล้วเรียบร้อยแล้วก็เข้าไปยัง main function ของโปรแกรม ซึ่งเราก็จะเจอว่าโปรแกรมนี้เป็นโปรแกรมที่จะเช็ค key ผ่าน CheckKey function และใช้ DecryptFlag function ในการ retrieve ค่า flag ออกมาในกรณีที่ใส่ข้อมูล secret key ได้ถูกต้อง

ซึ่งใน DecryptFlag function ก็จะมีแค่การเอาค่า hard-coded secret key (array) มา XOR กับ xor key (array2)

เมื่อ convert ตัว xor key ออกมา เราจะได้ค่า key คือ "SECP7AygroundP7@tf0rm"

จากนั้นเราสามารถเอา array มา convert แล้ว XOR กับ key ที่เราพึ่งได้มาก็จะได้ออกมาเป็น flag
re{Just_An_E3C_X0r_Cha77enG3}

จบไปแล้วครับกับหมวด Reverse Engineering ซึ่งเราก็จะเห็นได้ว่าใน 6 ข้อนี้ เราได้ reverse มาตอบจริง ๆ แค่ 2 ข้อเท่านั้น


https://github.com/eye9997/Santa_message
https://github.com/itxKAE/Video-Steganography/blob/master/main-module/wav-steg.py

python wav-steg.py -r -s santa_key_message.wav -n 1 -b 20 -o output.txt
forensic{santa_2024}


forensic{https://github.com/taipun/Minecraft/blob/main/MinecraftCrack.exe}


https://www.virustotal.com/gui/file/d95c97c31a22087b257107bacfdd21c8cc076463e13863c927d4dd76ed0d1b72/behavior
forensic{20.188.121.243:9999}


https://tria.ge/240525-rat35afd95

forensic{-|S.S.S|-}





https://www.virustotal.com/gui/domain/bibpap.com/community

https://bazaar.abuse.ch/sample/008653065299f1e96ecd195fe23948cc3976210bc8d58ba0e1456db17270154d/
forensic{e5d7a2dd2aafaa4e55c303c3533a36be}



forensic{117.154.101.223}